/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package eeep.controles;
import eeep.dao.BoletinDAO;
import eeep.dao.CursoDAO;
import eeep.dao.MateriaDAO;
import eeep.dao.PessoaDAO;
import eeep.entidades.Boletin;
import eeep.entidades.Identificacao;
import eeep.entidades.Materia;
import eeep.entidades.Opcao_Curso;
import eeep.entidades.Pessoa;
import eeep.entidades.Telefone;
import eeep.excecoes.ENEException;
import eeep.excecoes.PJCException;
import eeep.excecoes.PNEException;
import eeep.excecoes.TJCException;
import java.util.ArrayList;

/**
 *
 * @author Joao
 */
public class PessoaControle {
    PessoaDAO dao = new PessoaDAO();
    EnderecoControle end=new EnderecoControle();
    BoletinDAO daob=new BoletinDAO();
    BoletinControle conB=new BoletinControle();
    TelefoneControle conT=new TelefoneControle();
    public void CadastrarPessoa(Pessoa pessoa,ArrayList<Boletin> notas,ArrayList<Opcao_Curso> op,Telefone telefone)throws PJCException,TJCException{
        try{
           this.buscarPessoaPorIdentificacao(pessoa.getIdentificacao());
           throw new PJCException();
        }catch(PNEException e){
            ArrayList<Boletin> boletins=notas;
            ArrayList<Materia> materias=new CursoDAO().getMateriaPesoCurso(pessoa.getEscola().getLogin(),op.get(0).getCurso().getNome_curso());
            if(materias.isEmpty()==false){
                for(Materia aux:materias){
                   for(Boletin jax:notas){
                       if(aux.getNome_materia().equals(jax.getMateria().getNome_materia())){
                           Boletin novo=new Boletin();
                           novo.getMateria().setNome_materia(aux.getNome_materia());
                           novo.setMF(jax.getMF());
                           boletins.add(novo);
                           break;
                       }
                   } 
                }
            }
            double media=0;
            for(Boletin aux:boletins){
                media=aux.getMF()+media;
            }
            media=media/boletins.size();
            pessoa.setNota_corte_escola(media);
            try{
                end.buscarEndereco(pessoa.getEndereco());
                dao.salvarPessoa(pessoa);
            }catch(ENEException ex){
                end.cadastrarEndereco(pessoa.getEndereco());
                dao.salvarPessoa(pessoa);
            }
            conB.salvarBoletin(notas);
            conT.salvarTelefone(telefone);
        }
    }
    public Pessoa buscarPessoaPorIdentificacao(Identificacao identificacao)throws PNEException{
        Pessoa aux=dao.getPessoaPorIdentificacao(identificacao);
        if(aux!=null){
            return aux;
        }else{
            throw new PNEException();
    }    
}
    
    public void atualizarPessoa(Pessoa pessoa,Identificacao identificacao)throws PNEException,PJCException{
        try{
            this.buscarPessoaPorIdentificacao(pessoa.getIdentificacao());
            throw new PJCException();
        }catch(PNEException e){
            this.buscarPessoaPorIdentificacao(identificacao);
            dao.atualizarPessoa(pessoa, identificacao);
        }
        
    }
    public void removerPessoa(Pessoa pessoa)throws PNEException{
        this.buscarPessoaPorIdentificacao(pessoa.getIdentificacao());
        dao.deletePessoa(pessoa.getIdentificacao());
    }
}
